package com.moliku.insurance.model.entity.liberty;
/**
 * @author 七分
 * @date 2021/2/27 12:05
 * @version 1.0
 */

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class PolicyDataDto implements Serializable {
    private static final long serialVersionUID = 454081724134370956L;
    public static final Map<String,String> map = new HashMap<>();
    static {
        map.put("1","01");
        map.put("2","");
        map.put("3","03");
        map.put("4","04");
        map.put("71","51");
        map.put("72","53");
        map.put("99","99");
    }
    private MainHeadDto mainHeadDto;
    private AddressDto addressDto;
    private AgentDto agentDto;
    private AppliDto appliDto;
    private PeriodDto periodDto;
    private List insuredItemProcutDtoList;

    private ItemKindDto itemKindDto;

    private LibInsuresDto dto;

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class LibInsuresDto {
        private InsuredDto insuredDto;
        private ProductDto productDto;
    }

    /**
     * 内部类 保单公共信息
     */
    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class MainHeadDto {
        /**
         * 外部系统传入的订单号
         */
        private String bussFromNo;
        /**
         * 语种 C-中文
         */
        private String Language;
        /**
         * 币种 CNY-人民币
         */
        private String currency;
        /**
         * 险种
         * 2726 – 旅行险
         * 3105 – 个人套餐险,E通卡
         * 2713—团体意外险（仲利）
         * 3098-商险组合产品
         * 3207-租赁费用补偿
         */
        private String riskCode;
        /**
         * 合同争议解决方式
         * 1-诉讼，2-仲裁
         */
        private String argueSolution;
        /**
         * 第三方回调地址
         */
        private String callBackUrl;
        /**
         * 启程国家代码 CHN
         */
        private String departureCountry;
        /**
         * 启程国家名称
         */
        private String departureCountryName;
        /**
         * 目的地国家代码
         * 国内游相关产品统一传：CHN，国外游见参数文档。
         */
        private String arrivalCountry;
        /**
         * 目的地国家名称
         */
        private String arrivalCountryName;
    }

    /**
     * 内部类 地址信息
     */
    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class AddressDto {
        /**
         * 地址名称
         */
        private String addressName;
        /**
         * 地址邮编
         */
        private String postCode;
        /**
         * 地址编码
         */
        private String addressCode;
        /**
         * 建筑结构
         * 0001-钢结构
         * 0002-钢筋混凝土
         * 0003-混合
         * 0004-砖木
         * 0005-其它结构
         * 0006-砖混
         * 0007-钢混
         */
        private String buildStructure;
        /**
         * 原因
         */
        private String region;
    }

    /**
     * 内部类 代理人 销售信息
     */
    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class AgentDto {
        /**
         * 业务关系代码
         */
        private String agreementCode;
        /**
         * 产销人员
         */
        private String salerName;
        /**
         * 产销人员执业证
         */
        private String salerNumber;
    }

    /**
     * 内部类 投保人信息
     */
    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class AppliDto {
        /**
         * 投保人类型 1个人/2单位
         */
        private String insuredType;
        /**
         * 投保人中文名称
         */
        private String insuredName;
        /**
         * 投保人英文名称
         */
        private String insuredEName;
        /**
         * 投保人证件类型
         * 01-身份证/03-护照/04-军官证/99-其它
         * 团体时证件类型：
         * 51-工商登记号
         * 52-税务登记号
         * 53-组织机构代码
         * 54-三证合一
         * 99-其他
         */
        private String identifyType;
        /**
         * 证件号码
         */
        private String identifyNumber;
        /**
         * 出生日期 yyyy-MM-dd 个人时必传
         */
        private String birth;
        /**
         * 性别
         * 1-男
         * 2-女
         * 9-未说明
         */
        private String sex;
        /**
         * 邮箱
         */
        private String email;
        /**
         * 电话
         */
        private String linkMobile;
        /**
         * 支付方式
         * 1-刷卡
         * 2-网银转账
         * 3-支票
         * 4-现金
         * 5-内部转账
         * 7-在线支付
         */
        private String payMth;
        /**
         * 支付方式
         * 批改方式(D) 时传值
         * 1-刷卡
         * 2-网银转账 （在线退保只能选这种）
         * 3-支票
         * 4-现金
         * 5-内部转账
         * 7-在线支付
         */
        private Integer withDrawPayMth;
        /**
         * 开户账户
         */
        private String account;
        /**
         * 开户银行
         */
        private String bank;
        /**
         * 账户名称
         */
        private String accountName;

    }

    /**
     * 内部类 被保险人信息
     */
    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class InsuredDto {
        /**
         * 类型 1-个人/2-单位
         */
        private String insuredType;
        /**
         * 被保险人报人序号
         */
        private String serialNo;
        /**
         * 被保险人名称
         */
        private String insuredName;
        /**
         * 被保险人英文名称
         */
        private String insuredEName;

        /**
         * 证件类型
         * 个人时证件类型：
         * 01-身份证
         * 03-护照
         * 04-军官证
         * 99-其它
         * 团体时证件类型：
         * 51-工商登记号
         * 52-税务登记号
         * 53-组织机构代码
         * 54-三证合一
         * 99-其他
         */
        private String identifyType;
        /**
         * 证件号码
         */
        private String identifyNumber;
        /**
         * 出生日期
         */
        private String birth;
        /**
         * 性别
         */
        private String sex;
        /**
         * 与被保人关系
         * 01-本人
         * 10-配偶
         * 11-丈夫
         * 12-妻子
         * 20-儿子
         * 30-女儿
         * 40-儿女
         * 50-父母
         * 51-父亲
         * 52-母亲
         * 60-雇佣
         * 61-代理
         * 99-其它
         * 00-不适用
         */
        private String insuredidentity;
        /**
         * 邮箱
         */
        private String email;
        /**
         * 收益类型 0-法定收益
         */
        private String benefType;
        /**
         * 联系方式
         */
        private String linkMobile;
        /**
         * 批改方式
         * I 新增
         * D 删除
         * U 修改
         */
        private String flag;
        private String occupationCode;
        private String occupationName;

    }

    /**
     * 内部类 条款信息
     */
    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class ItemKindDto {
        /**
         * 条款代码
         */
        private String kindCode;
        /**
         * 保险责任代码
         */
        private String itemCode;
        /**
         * 责任名称
         */
        private String itemName;
        /**
         * 保额
         */
        private String amount;
        /**
         * 电子保单打印显示的保额
         */
        private String attribute4;
        /**
         * 保费
         */
        private String premium;
    }

    /**
     * 内部类 保障计划
     */
    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class ProductDto {

        /**
         * 计划代码
         */
        private String productCode;
        /**
         * 计划名称
         */
        private String productName;
        /**
         * 计划分组号
         */
        private String groupID;
        /**
         * 保额
         */
        private String amount;
        /**
         * 保费
         */
        private String premium;
        /**
         * 产品Id
         */
        private String productId;

    }

    /**
     * 内部类 保险期间信息
     */
    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class PeriodDto {
        /**
         * 起保日期
         */
        private String startDate;
        /**
         * 终报日期
         */
        private String endDate;
        /**
         * 起保小时
         */
        private String startHour;
        /**
         * 终保小时
         */
        private String endHour;
    }
}
